package flown.window;

import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.event.ChangeListener;

import flown.window.listener.ActionAndChangeListener;

/**
 * @author flown
 */


public class MenuBar
{
	private JMenuBar menu_bar;
	private ArrayList<JMenu> menu;
	private ArrayList<ArrayList<JMenuItem>> menu_item;

	public MenuBar()
	{
		/*初始化*/
		this.menu_bar = new JMenuBar();
		this.menu = new ArrayList<JMenu>();
		this.menu_item = new ArrayList<ArrayList<JMenuItem>>();
	}

	/**
	 * 添加至窗口
	 * @param w 窗口
	 */
	public final void AddInWindow(Window w) {w.SetMenuBar(this);w.SetVisible(true);}



	/**
	 * 添加一个菜单
	 * @return 菜单索引
	 * */
	public final int AddMenu(){return AddMenu("");}
	/**
	 * 添加一个菜单
	 * @param menu_text 菜单文本
	 * @return 菜单索引
	 * */
	public final int AddMenu(String menu_text)
	{
		this.menu.add(new JMenu(menu_text));//往菜单列表添加菜单
		this.menu_item.add(new ArrayList<JMenuItem>());

		this.menu_bar.add(this.menu.get(this.menu.size() - 1));//将菜单添加至菜单栏

		return this.menu.size() - 1;//返回菜单索引
	}



	/**
	 * 添加多个菜单
	 * @param n 菜单数量
	 * @return 菜单索引数组
	 * */
	public final int[] AddMenus(int n)//返回菜单索引
	{
		String[] title = new String[n];
		return this.AddMenus(title);
	}
	/**
	 * 添加多个菜单
	 * @param menu_text 菜单文本
	 * @return 菜单索引数组
	 * */
	public final int[] AddMenus(String... menu_text)//返回菜单索引
	{
		int[] menu_index = new int[menu_text.length];//各个菜单的索引

		for(int i = 0;i < menu_text.length;i++)
			menu_index[i] = this.AddMenu(menu_text[i]);//添加一个菜单

		return menu_index;//返回各个菜单索引
	}



	/**
	 * 添加一个菜单项
	 * @param menu_index 菜单索引
	 * @return 菜单项索引
	 * */
	public final int AddMenuItem(int menu_index){return this.AddMenuItem(menu_index, "");}
	/**
	 * 添加一个菜单项
	 * @param menu_index 菜单索引
	 * @param menu_item_text 菜单项文本
	 * @return 菜单项索引
	 * */
	public final int AddMenuItem(int menu_index,String menu_item_text)
	{
		this.menu_item.get(menu_index).add(new JMenuItem(menu_item_text));//添加菜单项
		this.menu.get(menu_index).add(this.menu_item.get(menu_index).get(this.menu_item.get(menu_index).size() - 1));//往菜单添加菜单项
		return this.menu_item.get(menu_index).size() - 1;//返回菜单项索引,索引等于菜单项数量 -1
	}



	/**
	 * 添加多个菜单项
	 * @param menu_index 菜单索引
	 * @param n 菜单项数量
	 * @return 菜单项索引数组
	 * */
	public final int[] AddMenuItems(int menu_index,int n)// menu_index 为菜单索引   n 为菜单项数量
	{
		String[] text = new String[n];
		return AddMenuItems(menu_index,text);
	}
	/**
	 * 添加多个菜单项
	 * @param menu_index 菜单索引
	 * @param menu_item_text 菜单项文本
	 * @return 菜单项索引数组
	 * */
	public final int[] AddMenuItems(int menu_index,String... menu_item_text)
	{
		int[] index = new int[menu_item_text.length];//各个菜单的索引

		for(int i = 0;i < menu_item_text.length;i++)
			index[i] = this.AddMenuItem(menu_index,menu_item_text[i]);//添加一个菜单项

		return index;//返回各个菜单项索引
	}



	/**
	 * 移除菜单
	 * @param menu_index 菜单索引
	 * */
	public final void RemoveMenu(int menu_index){this.menu_bar.remove(menu_index);this.menu.remove(menu_index);}



	/**
	 * 菜单插入分割线
	 * @param menu_index 菜单索引
	 * @param index 分割线索引
	 * */
	public final void MenuInsertSeparator(int menu_index,int index)
	{
		this.menu.get(menu_index).insertSeparator(index);
	}




	/**
	 * 菜单项添加监听器
	 * @param menu_index 菜单索引
	 * @param menu_item_index 菜单项索引
	 * @param listener action and change 监听器
	 * */
	public final void MenuItemAddListener(int menu_index, int menu_item_index,ActionAndChangeListener listener)
	{
		/*给菜单项添加ActionListener和ChangeListener*/
		this.menu_item.get(menu_index).get(menu_item_index).addActionListener(listener);
		this.menu_item.get(menu_index).get(menu_item_index).addChangeListener(listener);
	}
	/**
	 * 菜单项添加监听器
	 * @param menu_index 菜单索引
	 * @param menu_item_index 菜单项索引
	 * @param listener action监听器
	 */
	public final void MenuItemAddListener(int menu_index, int menu_item_index,ActionListener listener)
	{
		this.menu_item.get(menu_index).get(menu_item_index).addActionListener(listener);
	}
	/**
	 * 菜单项添加监听器
	 * @param menu_index 菜单索引
	 * @param menu_item_index 菜单项索引
	 * @param listener change监听器
	 */
	public final void MenuItemAddListener(int menu_index, int menu_item_index,ChangeListener listener)
	{
		this.menu_item.get(menu_index).get(menu_item_index).addChangeListener(listener);
	}




	/**
	 * 获取各项属性
	 * @return JMenuBar
	 * */
	public final JMenuBar GetMenuBar(){return this.menu_bar;}




	/**
	 * 获取菜单
	 * @param menu_index 菜单索引
	 * @return 菜单,JMenu
	 */
	public final JMenu GetMenu(int menu_index){return this.menu.get(menu_index);}
	/**
	 * 获取菜单
	 * @param menu_text 菜单文本
	 * @return 返回第一个找到的菜单,JMenu
	 */
	public final JMenu GetMenu(String menu_text)
	{
		int index = 0;//菜单索引
		for(int i = 0;i < this.menu.size();i++)//遍历菜单文本
		{
			if(this.menu.get(i).getText() == menu_text)//若菜单文本是要找的文本，结束循环
			{
				index = i;//索引记录
				break;//结束循环
			}
		}
		return this.menu.get(index);//返回菜单
	}




	/**
	 * 获取菜单项
	 * @param menu_index 菜单索引
	 * @param menu_item_index 菜单项索引
	 * @return 菜单项,JMenuItem
	 */
	public final JMenuItem GetMenuItem(int menu_index, int menu_item_index){return this.menu_item.get(menu_index).get(menu_item_index);}
	/**
	 * 获取菜单项
	 * @param menu_index 菜单索引
	 * @param menu_item_text 菜单项文本
	 * @return 返回第一个找到的菜单项,JMenuItem
	 */
	public final JMenuItem GetMenuItem(int menu_index, String menu_item_text)
	{
		int index = 0;//菜单项索引
		for(int i = 0;i < this.menu_item.size();i++)//遍历菜单项文本
		{
			if(this.menu_item.get(menu_index).get(i).getText() == menu_item_text)//若菜单项文本是要找的文本，结束循环
			{
				index = i;//索引记录
				break;//结束循环
			}
		}
		return this.menu_item.get(menu_index).get(index);//返回索引
	}



	/**
	 * 通过菜单文本找到菜单索引
	 *
	 * @param menu_text 菜单文本
	 * @return 返回第一个找到的菜单的索引
	 * */
	public final int GetMenuIndex(String menu_text)
	{
		int index = 0;//菜单索引
		for(int i = 0;i < this.menu.size();i++)//遍历菜单文本
		{
			if(this.menu.get(i).getText() == menu_text)//若菜单文本是要找的文本，结束循环
			{
				index = i;//索引记录
				break;//结束循环
			}
		}
		return index;//返回菜单
	}
	/**
	 * 通过菜单项文本找到菜单索引
	 *
	 * @param menu_index 菜单索引
	 * @param menu_item_text 菜单项文本
	 * @return 返回第一个找到的菜单项的索引
	 * */
	public final int GetMenuItemIndex(int menu_index, String menu_item_text)
	{
		int index = 0;//菜单项索引
		for(int i = 0;i < this.menu_item.size();i++)//遍历菜单项文本
		{
			if(this.menu_item.get(menu_index).get(i).getText() == menu_item_text)//若菜单项文本是要找的文本，结束循环
			{
				index = i;//索引记录
				break;//结束循环
			}
		}
		return index;//返回索引
	}




}









